﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NIP.Speech;
namespace NIP.Speech.Dialog
{
    /// <summary>
    /// Base class for other states
    /// </summary>
    public interface IDialogState
    {
        DialogStateType Type { set; get; }

        StateInputParameter para { set; get; }

        //! Status
        bool IsReady { set; get; }

        bool PreConditionCheck();

        void OnReady();

        string Name { set; get; }

        string DefaultSpeechResponse { set; get; }
        /// <summary>
        /// Whether this state could result in a Robot Action
        /// </summary>
        bool IsControlState { set; get; }

        /// <summary>
        /// What is the next State when abort command is issued
        /// </summary>
        DialogStateType DefaultAbortNextState { set; get; }

        /// <summary>
        /// When all code successfully excecuted
        /// </summary>
        DialogStateType DefaultNextState { set; get; }

        /// <summary>
        /// When all code successfully excecuted
        /// </summary>
        DialogStateType NextState { set; get; }

        /// <summary>
        /// Whether the response could be repeat i.e. Next state same state 
        /// </summary>
        bool IsRepeatable { set; get; }

        

        EventArgs.StateStatusEventArgs VoiceCommandResponse(string recognizedString);
        EventArgs.StateStatusEventArgs VoiceCommandResponse(Dictionary<string,string> recognizedText);
        
       
    }
}
